home *** CD-ROM | disk | FTP | other *** search
- This package is a port of CTask from C to C++, hence the name CPPTask. Since
- this is a spare time (and until now for personal use only) activity, I have
- not documented the changes that I have made.
-
- For the most part, all of the changes that I have made were for converting
- CTask to a class-based system. The original package was largely "object-
- oriented" anyway. The interesting areas surfaced in the C++ to assembly
- language interface (different linkage, etc.), and in the area of dynamic
- allocation of tasks, pipes, etc. The first problem was solved by creating
- C-linkage functions that invoked member functions. These functions are
- used by the assembly language routines. For example, in several of the
- assmbly language routines the function "inc_counter(counterptr)" was used.
- Since that function became "counter::inc_counter(void)", I created a
- function called "asm_inc_counter(counterptr)" with C-linkage. That function
- simply invokes the member function:
-
- void asm_inc_counter(counterptr ptr)
- {
- ptr->inc_counter();
- }
-
- I'm not sure if this is the best way, but it works. Also, several of the
- assembly language routines created objects, and since constructors cannot
- be invoked directly, I moved the creation of the objects to the C++ code
- and used the objects as described earlier.
-
- The biggest problem was the dynamic creation of objects. The C version of
- the create_??? routines checked for a NULL pointer and allocated memory if
- necessary. I redefined the new operator to perform the same processing.
- I am not sure if I have done everything that is necessary in the new "new".
- The file TSKALLOC.CPP contains the code. Also, I created "task::operator new"
- and "task::operator delete" to perform some processing previously done
- elsewhere. One final change in this area concerns the deletion of tasks
- that are enqueued on a timer queue. The original version merely set a
- flag in the tlink structure that indicated that this entry could be deleted.
- Unfortunately, the statement:
-
- delete mytask;
-
- could be disasterous if a timer queue was pointing to it. My solution was
- to change the task definition to include a pointer to a tlink structure
- instead of having the structure nested. This would allow the parent task
- to be deleted and the tlink structure to be marked for deletion when it was
- removed from the timer queue.
-
- I also removed the Named object processing (I was to lazy to convert it),
- and the support for other compilers. Since I was converting it to Turbo C++
- and I have no access to any other, I would be unable to test any conditional
- compilations anyway. Finally, I have not yet ported the parallel port
- interface or the AT-BIOS interface.
-
- Other than added some comments and rearranging some of the files, that is
- all I changed (funny it doesn't sound like much now.) I also changed the
- name of a couple of the structures, (so they made more sense to me) I hope
- this doesn't cause to much confusion.
-
- I am still not convinced that I have covered everything in the area of
- dynamic allocation and deallocation. I have tried some very minor variations
- on the original test programs, and it seems to work , but...
-
- Good Luck!
-
- Rich
-
-
-
- P.S. Here is a list of the files included in the archive:
-
-
- tskmain.cpp - some of the main routines, and the declaration of
- the static objects
- tsksub.cpp - some support routines
- tsktask.cpp - task object routines
- tsktimer.cpp - timer object routines
- tskalloc.cpp - memory allocation routines
- tskrsc.cpp - resource object routines
- tskcnt.cpp - counter object routines
- tskflg.cpp - flag object routines
- tskmsg.cpp - mailbox object routines
- tskpip.cpp - pipe object routines
- tskwpip.cpp - word pipe class routines
- tskbuf.cpp - buffer class routines
- tsksio.cpp - comm port class routines
- conout.cpp - sample use of console output
- test.cpp - simple test program
- tsio.cpp - simple serial I/O test program
-
- conout.hpp - header file for sample console output
- sio.hpp - header file for comm port class
- task.hpp - header file for all other classes
- tskconf.hpp - header file containing configuration definitions
- tsklocal.hpp - header file used internally by CPPTask
-
- tskasm.asm - scheduler
- tskbios.asm - BIOS support (NOT PORTED!!!)
- tskdos.asm - DOS support
- tskkbd.asm - keyboard support
- tsktim.asm - timer interrupt support
-
- tsk.mac - include file for assembly language
-
- test.prj - sample project file
- tsio.prj - sample project file
-